<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// 《你不知道的JAVASCRIPT》
	// - Symbol 值通过`Symbol`函数生成。
	// {
	// 	// Symbol是顶级对象window下的方法
	// 	// console.log(window.Symbol);// ƒ Symbol() { [native code] }
	//
	// 	// 生成Symbol
	// 	// const s1 = Symbol();
	// 	// const s2 = Symbol();
	// 	// console.log(s1,s2);// Symbol() Symbol()
	// 	// console.log(typeof s1,typeof s2);// symbol symbol
	// 	// console.log(s1 === s2);// false
	// }
	
	// - 这就是说，对象的属性名现在可以有两种类型，一种是原来就有的字符串，另一种就是新增的 Symbol 类型。
	//   凡是属性名属于 Symbol 类型，就都是独一无二的，可以保证不会与其他属性名产生冲突
	{
		// 会被覆盖
		// let obj = {};
		// let obj2 = {};
		// let obj3 = {
		// 	[obj]:1,
		// 	[obj2]:2
		// };
		// console.log(obj3);// {[object object]:2}
		
		let s1 = Symbol();
		let obj = {
			[Symbol()]:1,
			[Symbol()]:2,
			[Symbol()]:3,
			[s1]:4
		}
		console.log(obj);// {Symbol(): 1, Symbol(): 2, Symbol(): 3}
		console.log(obj[Symbol()],obj[s1]);// undefined 4
	}
	
</script>
</html>